/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.documentar.DAO;

import br.com.documentar.interfacee.InterfaceDAO;
import br.com.documentar.model.ClienteModel;
import br.com.documentar.util.UtilitariosCampos;
import java.sql.SQLException;
import java.util.List;

/**
 *
 * @author Santos
 */
public class ClienteDAO extends AbstractDAO implements InterfaceDAO<List<ClienteModel>, ClienteModel> {

    @Override
    public boolean setDados(ClienteModel model) {

        if (model.getCodigo() != 0 && model.getActionScript().equals("I")) {
            System.out.println("Cliente já cadastrado");
            //JOptionPane.showMessageDialog(null, "Cliente já cadastrado");//ver possibilidae de update
            return true;
        }

        if (model.getClientePaiModel().getCodigo() == 0
                || model.getCodigo() == model.getClientePaiModel().getCodigo()) {
            model.getClientePaiModel().setActionScript("null");
        } else {
            model.getClientePaiModel().setActionScript(UtilitariosCampos.getIntegerText(model.getClientePaiModel().getCodigo()));
        }

        String sql = null;
        ConnectDataBase();

        switch (model.getActionScript()) {
            case "I":
                sql = "INSERT INTO \n"
                        + "  `tcli_cliente`\n"
                        + "(\n"
                        //+ "  `TCLI_CODIGO_PK`,\n"
                        + "  `TCLI_REVENDA_FK`, \n"
                        + "  `TCLI_CLIENTE_PAI_FKN`,\n"
                        + "  `TCLI_NOME_RAZAO_SOCIAL`,\n"
                        + "  `TCLI_NOME_FANTASIA`,\n"
                        + "  `TCLI_NUMERO_DOCUMENTO`,\n"
                        + "  `TCLI_EMAIL`,\n"
                        + "  `TCLI_TELEFONE_EMPRESA_1`,\n"
                        + "  `TCLI_TELEFONE_EMPRESA_2`,\n"
                        + "  `TCLI_CODIGO_UNIDADE_NEGOCIO`,\n"
                        + "  `TCLI_CONTATO`,\n"
                        + "  `TCLI_CELULAR_1`,\n"
                        + "  `TCLI_CELULAR_2`,\n"
                        + "  `TCLI_CELULAR_3`,\n"
                        + "  `TCLI_TELEFONE_1`,\n"
                        + "  `TCLI_TELEFONE_2`,\n"
                        + "  `TCLI_TELEFONE_3`,\n  "
                        + "  `TCLI_EMAIL_CONTATO`,\n  "
                        + "  `TCLI_ENDERECO`,\n"
                        + "  `TCLI_COMPLEMENTO_ENDERECO`,\n"
                        + "  `TCLI_BAIRRO`,\n"
                        + "  `TCLI_CIDADE`,\n"
                        + "  `TCLI_ESTADO`,\n"
                        + "  `TCLI_ESTADO_UF`,\n"
                        + "  `TCLI_PAIS`,   "
                        + "  `TCLI_CEP`,"
                        + "  `TCLI_ATIVO`) \n"
                        + "VALUE (\n"
                        //+ "  :TCLI_CODIGO_PK,\n"
                        + "  " + model.getRevendaModel().getCodigo() + ",\n"
                        + "  " + model.getClientePaiModel().getActionScript() + ",\n"
                        + "  '" + model.getNomeRazao() + "',\n"
                        + "  '" + model.getNomeFantasia() + "',\n"
                        + "  '" + model.getNumeroDocumento() + "',\n"
                        + "  '" + model.getEmail() + "',\n"
                        + "  '" + model.getTelefoneEmpresa1() + "',\n"
                        + "  '" + model.getTelefoneEmpresa2() + "',\n"
                        + "  " + model.getCodigoUnidadeNegocio() + ",\n"
                        + "  '" + model.getContato() + "',\n"
                        + "  '" + model.getCelularContato1() + "',\n"
                        + "  '" + model.getCelularContato2() + "',\n"
                        + "  '" + model.getCelularContato3() + "',\n"
                        + "  '" + model.getTelefoneContato1() + "',\n"
                        + "  '" + model.getTelefoneContato2() + "',\n"
                        + "  '" + model.getTelefoneContato3() + "',\n"
                        + "  '" + model.getEmailContato() + "',\n"
                        + "  '" + model.getEndereco() + "',\n"
                        + "  '" + model.getComplementoEndereco() + "',\n"
                        + "  '" + model.getBairro() + "',\n"
                        + "  '" + model.getCidade() + "',\n"
                        + "  '" + model.getEstado() + "',\n"
                        + "  '" + model.getUfEstado() + "',\n"
                        + "  '" + model.getPais() + "',\n"
                        + "  '" + model.getCep() + "',\n"
                        + "  '" + model.getAtivo() + "')";
                break;
            case "U":
                sql = "UPDATE `tcli_cliente`\n"
                        + "SET\n"
                        + "`TCLI_REVENDA_FK` = " + model.getRevendaModel().getCodigo() + ",\n"
                        + "`TCLI_CLIENTE_PAI_FKN` = " + model.getClientePaiModel().getActionScript() + ",\n"
                        + "`TCLI_NOME_RAZAO_SOCIAL` = '" + model.getNomeRazao() + "',\n"
                        + "`TCLI_NOME_FANTASIA` = '" + model.getNomeFantasia() + "',\n"
                        + "`TCLI_NUMERO_DOCUMENTO` = '" + model.getNumeroDocumento() + "',\n"
                        + "`TCLI_EMAIL` = '" + model.getEmail() + "',\n"
                        + "`TCLI_TELEFONE_EMPRESA_1` = '" + model.getTelefoneEmpresa1() + "',\n"
                        + "`TCLI_TELEFONE_EMPRESA_2` = '" + model.getTelefoneEmpresa2() + "',\n"
                        + "`TCLI_CODIGO_UNIDADE_NEGOCIO` = '" + model.getCodigoUnidadeNegocio() + "' ,\n"
                        + "`TCLI_CONTATO` = '" + model.getContato() + "',\n"
                        + "`TCLI_CELULAR_1` = '" + model.getCelularContato1() + "',\n"
                        + "`TCLI_CELULAR_2` = '" + model.getCelularContato2() + "',\n"
                        + "`TCLI_CELULAR_3` = '" + model.getCelularContato3() + "',\n"
                        + "`TCLI_TELEFONE_1` = '" + model.getTelefoneContato1() + "',\n"
                        + "`TCLI_TELEFONE_2` = '" + model.getTelefoneContato2() + "',\n"
                        + "`TCLI_TELEFONE_3` = '" + model.getTelefoneContato3() + "',\n"
                        + "`TCLI_EMAIL_CONTATO` = '" + model.getEmailContato() + "',\n"
                        + "`TCLI_ENDERECO` = '" + model.getEndereco() + "',\n"
                        + "`TCLI_COMPLEMENTO_ENDERECO` = '" + model.getComplementoEndereco() + "',\n"
                        + "`TCLI_BAIRRO` = '" + model.getBairro() + "',\n"
                        + "`TCLI_CIDADE` = '" + model.getCidade() + "',\n"
                        + "`TCLI_ESTADO` = '" + model.getEstado() + "',\n"
                        + "`TCLI_ESTADO_UF` = '" + model.getUfEstado() + "',\n"
                        + "`TCLI_PAIS` = '" + model.getPais() + "',\n"
                        + "`TCLI_CEP` = '" + model.getCep() + "',\n"
                        + "`TCLI_ATIVO` = '" + model.getAtivo() + "'\n"
                        + "WHERE `TCLI_CODIGO_PK` = " + model.getCodigo() + " ";
                break;
            case "D":
                sql = "DELETE FROM \n"
                        + "  `tcli_cliente` \n"
                        + "WHERE \n"
                        + "  `TCLI_CODIGO_PK` = " + model.getCodigo() + "";
                break;
        }
        return InsertUpdateDelete(sql, model.getNomeTela());
    }

    @Override
    public List<ClienteModel> getDados(ClienteModel model) {
        model.setResultSet(null);
        model.getListaCliente().clear();
        String sql = "SELECT \n"
                + "    `cliente`.`TCLI_CODIGO_PK`,\n"
                + "    `cliente`.`TCLI_REVENDA_FK`,\n"
                + "    `revenda`.`TREV_NOME`,\n"
                + "    `cliente`.`TCLI_CLIENTE_PAI_FKN`,\n"
                + "    COALESCE((select `clientePai`.`TCLI_NOME_RAZAO_SOCIAL` from `tcli_cliente` `clientePai` \n"
                + "     where `clientePai`.`TCLI_CODIGO_PK` = `cliente`.`TCLI_CLIENTE_PAI_FKN`), 'RAIZ') NOME_PAI,\n"
                + "    `cliente`.`TCLI_NOME_RAZAO_SOCIAL`,\n"
                + "    `cliente`.`TCLI_NOME_FANTASIA`,\n"
                + "    `cliente`.`TCLI_NUMERO_DOCUMENTO`,\n"
                + "    `cliente`.`TCLI_EMAIL`,\n"
                + "    `cliente`.`TCLI_TELEFONE_EMPRESA_1`,\n"
                + "    `cliente`.`TCLI_TELEFONE_EMPRESA_2`,\n"
                + "    `cliente`.`TCLI_CODIGO_UNIDADE_NEGOCIO`,\n"
                + "    `cliente`.`TCLI_CONTATO`,\n"
                + "    `cliente`.`TCLI_CELULAR_1`,\n"
                + "    `cliente`.`TCLI_CELULAR_2`,\n"
                + "    `cliente`.`TCLI_CELULAR_3`,\n"
                + "    `cliente`.`TCLI_TELEFONE_1`,\n"
                + "    `cliente`.`TCLI_TELEFONE_2`,\n"
                + "    `cliente`.`TCLI_TELEFONE_3`,\n"
                + "    `cliente`.`TCLI_EMAIL_CONTATO`,\n"
                + "    `cliente`.`TCLI_ENDERECO`,\n"
                + "    `cliente`.`TCLI_COMPLEMENTO_ENDERECO`,\n"
                + "    `cliente`.`TCLI_BAIRRO`,\n"
                + "    `cliente`.`TCLI_CEP`,\n"
                + "    `cliente`.`TCLI_CIDADE`, \n"
                + "    `cliente`.`TCLI_ESTADO`, \n"
                + "    `cliente`.`TCLI_ESTADO_UF`,\n"
                + "    `cliente`.`TCLI_PAIS`, "
                //               + "    `cliente`.`TCLI_REGIME_TRIBUTARIO`, "
                + "    `cliente`.`TCLI_ATIVO`\n"
                + "FROM \n"
                + "      `tcli_cliente` `cliente`\n"
                + "    inner join `trev_revenda` `revenda` \n"
                + "    on `cliente`.`TCLI_REVENDA_FK` = `revenda`.`TREV_CODIGO_PK`  ";
        try {
            ConnectDataBase();
            switch (model.getActionScript()) {
                case "C":
                    model.setResultSet(Select(sql, model.getNomeTela()));
                    break;
                case "P":
                    model.setResultSet(Select(sql + " WHERE `cliente`.`TCLI_NOME_RAZAO_SOCIAL` LIKE '%" + model.getNomeRazao() + "%' ", model.getNomeTela()));
                    break;
                case "porNumeroDocumento":
                    model.setResultSet(Select(sql + " where `cliente`.`TCLI_NUMERO_DOCUMENTO` = '" + model.getNumeroDocumento() + "' ", model.getNomeTela()));
                    break;
                case "porClienteRaiz":
                    model.setResultSet(Select(sql + " where `cliente`.`TCLI_CLIENTE_PAI_FKN` IS NULL ", model.getNomeTela()));
                    break;
            }
            while (model.getResultSet().next()) {
                br.com.documentar.model.ClienteModel p = new br.com.documentar.model.ClienteModel();
                p.setCodigo(rs.getInt("TCLI_CODIGO_PK"));
                p.getRevendaModel().setCodigo(rs.getInt("TCLI_REVENDA_FK"));
                p.getRevendaModel().setNome(rs.getString("TREV_NOME"));
                p.getClientePaiModel().setCodigo(rs.getInt("TCLI_CLIENTE_PAI_FKN"));
                p.getClientePaiModel().setNomeRazao(rs.getString("NOME_PAI"));
                p.setNomeRazao(rs.getString("TCLI_NOME_RAZAO_SOCIAL"));
                p.setNomeFantasia(rs.getString("TCLI_NOME_FANTASIA"));
                p.setNumeroDocumento(rs.getString("TCLI_NUMERO_DOCUMENTO"));
                p.setEmail(rs.getString("TCLI_EMAIL"));
                p.setTelefoneEmpresa1(rs.getString("TCLI_TELEFONE_EMPRESA_1"));
                p.setTelefoneEmpresa2(rs.getString("TCLI_TELEFONE_EMPRESA_2"));
                p.setCodigoUnidadeNegocio(rs.getString("TCLI_CODIGO_UNIDADE_NEGOCIO"));
                p.setContato(rs.getString("TCLI_CONTATO"));
                p.setCelularContato1(rs.getString("TCLI_CELULAR_1"));
                p.setCelularContato2(rs.getString("TCLI_CELULAR_2"));
                p.setCelularContato3(rs.getString("TCLI_CELULAR_3"));
                p.setTelefoneContato1(rs.getString("TCLI_TELEFONE_1"));
                p.setTelefoneContato2(rs.getString("TCLI_TELEFONE_2"));
                p.setTelefoneContato3(rs.getString("TCLI_TELEFONE_3"));
                p.setEmailContato(rs.getString("TCLI_EMAIL_CONTATO"));
                p.setEndereco(rs.getString("TCLI_ENDERECO"));
                p.setComplementoEndereco(rs.getString("TCLI_COMPLEMENTO_ENDERECO"));
                p.setBairro(rs.getString("TCLI_BAIRRO"));
                p.setCep(rs.getString("TCLI_CEP"));
                //    p.setRegimeTributario(rs.getString("TCLI_REGIME_TRIBUTARIO").charAt(0));
                p.setCidade(rs.getString("TCLI_CIDADE"));
                p.setEstado(rs.getString("TCLI_ESTADO"));
                p.setUfEstado(rs.getString("TCLI_ESTADO_UF"));
                p.setPais(rs.getString("TCLI_PAIS"));
                p.setAtivo(rs.getString("TCLI_ATIVO").charAt(0));
                model.getListaCliente().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            Desconectar(model.getNomeTela());
        }
        return model.getListaCliente();
    }

    /**
     * Metodo responsável por captar os dados no oracle
     *
     * @param model
     * @return
     */
    public List<ClienteModel> getDadosERP(ClienteModel model) {
        AbstractDAO teste = new AbstractDAO("Oracle", model.getHostERP(), model.getNomeBancoDadosERP(), model.getPortaERP(), model.getUsuarioERP(), model.getSenhaERP());

        model.setResultSet(null);
        model.getListaCliente().clear();
        String sql = "select unidade.tund_razao_social,\n"
                + "                                     unidade.tund_fantasia,\n"
                + "                                     unidade.tund_cnpj,\n"
                + "                                     unidade.tund_fone_ddd || '' || unidade.tund_fone_prefixo || '' ||\n"
                + "                                     unidade.tund_fone_final telefone_empresa_1,\n"
                + "                                     unidade.tund_fax_ddd || '' || unidade.tund_fax_prefixo || '' ||\n"
                + "                                     unidade.tund_fax_final telefone_empresa_2,\n"
                + "                                     unidade.tund_unidade_pk, \n"
                + "                                     unidade.tund_email, \n"
                + "                                     (select unidadePai.Tund_Cnpj\n"
                + "                                        from tund_unidade unidadePai\n"
                + "                                        where unidadePai.Tund_Unidade_Pk =\n"
                + "                                           (select min(a.tund_unidade_pk) from tund_unidade a)) clientePai,\n"
                + "                                     unidade.tund_endereco,\n"
                + "                                     unidade.tund_complemento,\n"
                + "                                     unidade.tund_bairro,\n"
                + "                                     unidade.tund_cidade_cep_fk,\n"
                + "                                     cidade.tloc_nome cidade,\n"
                + "                                     uf.tloc_nome estado,\n"
                + "                                     uf.tloc_uf_pk,\n"
                + "                                     pais.tloc_nome_pais\n"
                + "                                from tund_unidade unidade\n"
                + "                                inner join tloc_cidade_cep cidade \n"
                + "                                on cidade.tloc_cidade_cep_pk = unidade.tund_cidade_cep_fk\n"
                + "                                inner join tloc_uf uf \n"
                + "                                on cidade.tloc_uf_fk = uf.tloc_uf_pk\n"
                + "                                inner join tloc_pais pais\n"
                + "                                on uf.tloc_pais_fk = pais.tloc_pais_pk\n"
                + "                                order by unidade.tund_unidade_pk  ";
        try {
            teste.ConnectDataBase();
            switch (model.getActionScript()) {
                case "C": {
                    model.setResultSet(teste.Select(sql, model.getNomeTela()));
                    break;
                }
            }

            while (teste.rs.next()) {
                br.com.documentar.model.ClienteModel p = new br.com.documentar.model.ClienteModel();
                p.setNomeRazao(teste.rs.getString("tund_razao_social"));
                p.setNomeFantasia(teste.rs.getString("tund_fantasia"));
                p.setNumeroDocumento(teste.rs.getString("tund_cnpj"));
                p.setEmail(teste.rs.getString("tund_email"));
                p.setTelefoneEmpresa1(teste.rs.getString("telefone_empresa_1"));
                p.setTelefoneEmpresa2(teste.rs.getString("telefone_empresa_2"));
                p.setCodigoUnidadeNegocio(teste.rs.getString("tund_unidade_pk"));
                p.getClientePaiModel().setNumeroDocumento(teste.rs.getString("clientePai"));
                p.setEndereco(teste.rs.getString("tund_endereco"));
                p.setComplementoEndereco(teste.rs.getString("tund_complemento"));
                p.setBairro(teste.rs.getString("tund_bairro"));
                p.setCep(teste.rs.getString("tund_cidade_cep_fk"));
                p.setCidade(teste.rs.getString("cidade"));
                p.setEstado(teste.rs.getString("estado"));
                p.setUfEstado(teste.rs.getString("tloc_uf_pk"));
                p.setPais(teste.rs.getString("tloc_nome_pais"));

                model.getListaCliente().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            teste.Desconectar(model.getNomeTela());
        }
        return model.getListaCliente();
    }

    /**
     * Metodo responsável por captar os dados no firebird
     *
     * @param model
     * @return
     */
    public List<ClienteModel> getDadosFrenteLoja(ClienteModel model) {
        AbstractDAO teste = new AbstractDAO("Firebird", model.getHostFrenteLoja(), model.getNomeBancoDadosFrenteLojaECF(), model.getPortaFrenteLoja(), model.getUsuarioFrenteLoja(), model.getSenhaFrenteLoja());

        model.setResultSet(null);
        model.getListaCliente().clear();
        String sql = "select unidade.tund_razao_social,\n"
                + "                     unidade.tund_fantasia,\n"
                + "                     unidade.tund_cnpj,\n"
                + "                     unidade.tund_fone_ddd || '' || unidade.tund_fone_prefixo || '' ||\n"
                + "                     unidade.tund_fone_final telefone_empresa_1,\n"
                + "                     unidade.tund_fax_ddd || '' || unidade.tund_fax_prefixo || '' ||\n"
                + "                     unidade.tund_fax_final telefone_empresa_2,\n"
                + "                     unidade.tund_unidade_pk\n"
                + "                from tund_unidade unidade\n"
                + "                order by unidade.tund_unidade_pk  ";
        try {
            teste.ConnectDataBase();
            switch (model.getActionScript()) {
                case "C": {
                    model.setResultSet(teste.Select(sql, model.getNomeTela()));
                    break;
                }
            }
            while (teste.rs.next()) {
                br.com.documentar.model.ClienteModel p = new br.com.documentar.model.ClienteModel();
                p.setNomeRazao(teste.rs.getString("tund_razao_social"));
                p.setNomeFantasia(teste.rs.getString("tund_fantasia"));
                p.setNumeroDocumento(teste.rs.getString("tund_cnpj"));
                p.setTelefoneEmpresa1(teste.rs.getString("telefone_empresa_1"));
                p.setTelefoneEmpresa2(teste.rs.getString("telefone_empresa_2"));
                p.setCodigoUnidadeNegocio(teste.rs.getString("tund_unidade_pk"));
                model.getListaCliente().add(p);
            }
        } catch (SQLException ex) {
            ex.getStackTrace();
        } finally {
            teste.Desconectar(model.getNomeTela());
        }
        return model.getListaCliente();
    }
}